package maquina.gestor.flujo;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import maquina.interfaz.usuario.InterfazDeUsuario;
import maquina.modelo.elector.Candidato;
import maquina.modelo.elector.ModeloElector;


public class GestorFlujo {

	private ModeloElector modeloElector;
    private InterfazDeUsuario interfazDeUsuario;
    
    private GestorTarjeta gestorTarjeta;

	public GestorFlujo(ModeloElector model,InterfazDeUsuario interfazDeUsuario) {

		this.modeloElector = model;
		this.interfazDeUsuario=interfazDeUsuario;
		
		try {
			this.gestorTarjeta = new GestorTarjeta(this);
			
		} catch (RemoteException e) {

			interfazDeUsuario.presentarFallaLector();
			
			e.printStackTrace();
		}
		
		interfazDeUsuario.presentarEsperaDeNuevaTarjeta();
		
		gestorTarjeta.ping();
	}

	public void gestionarEntrada(int entrada) {
		
        modeloElector.cambiarEstadoCandidato(entrada);   
	}

	public void gestionarNuevaTarjeta(){

		modeloElector.nuevaEleccion();
		
		interfazDeUsuario.iniciarNuevaVotacion();
	}
	
	public void gestionarConfirmacionSeleccion() {
		
		List<Candidato> candidatos = modeloElector.confirmarEleccion();
		
		if (candidatos != null){
			
			gestionarCierreDeVotacion(candidatos);
		}
	}

	public void gestionarCierreDeVotacion(List<Candidato> candidatos) {
		
		List<String> list = new ArrayList<String>();
		
		for(Candidato candidato: candidatos){
			
			list.add(String.valueOf(candidato));
		}
		
		gestorTarjeta.escribirTarjeta(list);
		
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		gestorTarjeta.ping();
	}
	
	public void gestionarFallaLector(){
		
		interfazDeUsuario.presentarFallaLector();
	}
}
